Python - requests 模块学习

首先安装模块

pip install requests

requests 模块含有许多自带的方法 使用 dir 命令可以查看属性

1
2
3
4
import requests
print dir(requests)

>>> ['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', 'RequestException', 'RequestsDependencyWarning', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__author_email__', '__build__', '__builtins__', '__cake__', '__copyright__', '__description__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__url__', '__version__', '_check_cryptography', '_internal_utils', 'adapters', 'api', 'auth', 'certs', 'chardet', 'check_compatibility', 'codes', 'compat', 'cookies', 'cryptography_version', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'pyopenssl', 'request', 'session', 'sessions', 'status_codes', 'structures', 'urllib3', 'utils', 'warnings']

使用 Python 编写请求包

GET 请求包编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests

url = "https://www.baidu.com"

# 设置代理地址
proxies = {
"http":"http://127.0.0.1:8080",
"https":"https://127.0.0.1:8080",
}

# 请求包头部编写
headers = {
"user-agent" : "Firefox",
"wcute" : "hello wcute",
}

# 设置 cookie
cookies = {
"cookies" : "wcute-cookie"
}

# 生成请求对象
re = requests.get(url, proxies = proxies,verify=False, headers = headers)

print re.status_code

打开burp,设置代理与 python 中一样,运行python程序即可看到请求包结构
1.png

如果感觉burp麻烦的话也可以使用requests自带方法查看请求包结构

print re.request.headers

2.png

POST 请求包编写

post 型与 get 型接近想同 ,只不过可以进行数据提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests

url = "https://www.baidu.com"

proxies = {
"http":"http://127.0.0.1:8080",
"https":"https://127.0.0.1:8080",
}

headers = {
"user-agent" : "Firefox",
"wcute" : "hello wcute",
}

cookies = {
"cookies" : "wcute-cookie"
}

# POST 提交数据
payload = {
"payload" : "how",
}

re = requests.post(url, proxies = proxies,data = payload, verify=False, headers = headers, cookies = cookies)

print re.status_code

3.png

常用Response对象属性

1
2
3
4
5
6
re.status_code        HTTP 请求返回的状态码
re.text HTTP 响应内容的字符串格式,URL 对应页面内容
re.encoding 从 HTTP header 中猜测的响应内容编码方式
re.content HTTP 响应内容的二进制格式
re.json() Requests 内置 json 解码器
re.headers HTTP 请求头内容